package comunicacao;

import objectos.*;

/**
 * @author igo
 * Classe Info
 * Classe que serve para enviar a informação sobre um Objecto ao Cliente.
 */
public class Info extends Comunicacao{
    
    private String Nome;
    private int Ataque;
    private int Vida;
    private int Velocidade;
    private int Range;
    private TipoObjecto TO;
    private TipoPokemon TP;

    /**
     * 
     * @return Retorna o valor do ataque da Personagem
     */
    public int getAtaque() {
        return Ataque;
    }

    /**
     * 
     * @return Retorna o nome do Objecto
     */
    public String getNome() {
        return Nome;
    }

    /**
     * 
     * @return Retorna o Range da Personagem
     */
    public int getRange() {
        return Range;
    }

    /**
     * 
     * @return Retorna o Tipo do Pokemon
     */
    public TipoPokemon getTP() {
        return TP;
    }
    
    /**
     * 
     * @return Retorna o Tipo do Objecto
     */
    public TipoObjecto getTO(){
        return TO;
    }

    /**
     * 
     * @return Retorna o valor da velocidade da Personagem
     */
    public int getVelocidade() {
        return Velocidade;
    }

    /**
     * 
     * @return Retorna o valor da Vida da Personagem
     */
    public int getVida() {
        return Vida;
    }

    /**
     * Constructor da Info
     * @param T - Recebe um Treinador ao qual irá retirar a informação a mostrar
     */
    public Info(Treinador T) {
        this.Nome = T.getInfo();
        this.Ataque = T.getAtaque();
        this.Vida = T.getVida();
        this.Velocidade = T.getVelocidade();
        this.Range = T.getRange();
        this.TO = T.getTipo();
    }

    /**
     * Constructor da Info
     * @param V - Recebe um Objecto Vazio e aprensenta um Info em branco.
     */
    public Info(Vazio V) {
        this.Nome = V.getNome();
        this.TO = V.getTipo();
    }
    
    /**
     * Constructor da Info
     * @param Ob - Recebe um Obstáculo e mostra a informação do Obstáculo
     */
    public Info(Obstaculo Ob) {
        this.Nome = Ob.getNome();
        this.TO = Ob.getTipo();
    }
    
    /**
     * Constructor da Info
     * @param P - Recebe um Pokemon e retira a informação a mostrar
     */
    public Info(Pokemon P) {
        this.Nome = P.getNome();
        this.Ataque = P.getAtaque();
        this.Vida = P.getVida();
        this.Range = P.getRange();
        this.Velocidade = P.getVelocidade();
        this.TP = P.tipoPokemon();
        this.TO = P.getTipo();
    }
   
    @Override
    public TipoComunicacao getTipo() {
        return TipoComunicacao.INFO;
    }   
}